#!/usr/bin/env python3
"""
数据库迁移脚本 - 从SQLite迁移到MySQL
"""

from flask import Flask
from tools.db import init_db, create_database
from models.models import *
import os
import sys

def create_app():
    """创建Flask应用"""
    app = Flask(__name__)
    return app

def migrate_to_mysql():
    """迁移到MySQL数据库"""
    print("🚀 开始数据库迁移到MySQL")
    print("=" * 50)
    
    # 1. 创建数据库
    print("📊 步骤1: 创建MySQL数据库")
    if not create_database():
        print("❌ 数据库创建失败，请检查MySQL连接")
        return False
    print("✅ 数据库创建成功")
    
    # 2. 初始化Flask应用
    print("\n🔧 步骤2: 初始化Flask应用")
    app = create_app()
    
    try:
        # 3. 初始化数据库连接
        print("🔗 步骤3: 连接MySQL数据库")
        db = init_db(app, use_mysql=True)
        print("✅ MySQL数据库连接成功")
        
        # 4. 创建所有表
        print("\n📋 步骤4: 创建数据库表")
        with app.app_context():
            # 创建所有表
            db.create_all()
            
            # 显示创建的表
            inspector = db.inspect(db.engine)
            tables = inspector.get_table_names()
            print(f"✅ 成功创建 {len(tables)} 个表:")
            for table in tables:
                print(f"   - {table}")
        
        print("\n🎉 数据库迁移完成！")
        print("📊 迁移结果:")
        print("   ✅ 数据库: management_system")
        print("   ✅ 用户: root")
        print("   ✅ 密码: 12345")
        print("   ✅ 主机: localhost:3306")
        print("   ✅ 字符集: utf8mb4")
        
        return True
        
    except Exception as e:
        print(f"\n❌ 迁移失败: {str(e)}")
        print("🔧 请检查:")
        print("   1. MySQL服务是否正在运行")
        print("   2. 用户名和密码是否正确")
        print("   3. 是否有创建数据库的权限")
        return False

def test_connection():
    """测试数据库连接"""
    print("\n🧪 测试数据库连接")
    print("=" * 30)
    
    try:
        app = create_app()
        db = init_db(app, use_mysql=True)
        
        with app.app_context():
            # 测试连接
            result = db.session.execute(db.text("SELECT 1")).fetchone()
            if result:
                print("✅ 数据库连接测试成功")
                return True
            else:
                print("❌ 数据库连接测试失败")
                return False
                
    except Exception as e:
        print(f"❌ 连接测试失败: {str(e)}")
        return False

def show_database_info():
    """显示数据库信息"""
    print("\n📊 数据库信息")
    print("=" * 30)
    print("数据库类型: MySQL")
    print("数据库名称: management_system")
    print("主机地址: localhost:3306")
    print("用户名: root")
    print("密码: 12345")
    print("字符集: utf8mb4")
    print("排序规则: utf8mb4_unicode_ci")
    
    print("\n📋 数据表列表:")
    tables = [
        "user - 用户表",
        "role - 角色表", 
        "permission - 权限表",
        "order - 订单表",
        "order_item - 订单项表",
        "address - 地址表",
        "tag - 标签表",
        "user_roles - 用户角色关系表",
        "role_permissions - 角色权限关系表",
        "user_tags - 用户标签关系表"
    ]
    
    for table in tables:
        print(f"   - {table}")

def main():
    """主函数"""
    print("🗄️ MySQL数据库迁移工具")
    print("=" * 50)
    
    # 检查参数
    if len(sys.argv) > 1:
        command = sys.argv[1]
        if command == "test":
            test_connection()
            return
        elif command == "info":
            show_database_info()
            return
        elif command == "help":
            print("可用命令:")
            print("  python migrate_to_mysql.py          # 执行迁移")
            print("  python migrate_to_mysql.py test     # 测试连接")
            print("  python migrate_to_mysql.py info     # 显示数据库信息")
            print("  python migrate_to_mysql.py help     # 显示帮助")
            return
    
    # 执行迁移
    success = migrate_to_mysql()
    
    if success:
        # 测试连接
        test_connection()
        
        # 显示数据库信息
        show_database_info()
        
        print("\n🎯 下一步:")
        print("   1. 启动Flask应用: python app_with_redis.py")
        print("   2. 初始化数据: POST http://localhost:5000/api/init_data")
        print("   3. 测试API接口")
    else:
        print("\n❌ 迁移失败，请检查错误信息并重试")
        sys.exit(1)

if __name__ == '__main__':
    main()
